package array

import (
	"soluty.cc/go/godash/types"
)

// 创建唯一值的数组，这个数组包含所有给定数组都包含的元素（注：可以理解为给定数组的交集）
func IntersectionBy(arrays [][]T, iteratee func(T) T) []T {
	if len(arrays) == 0 {
		return nil
	}
	var ret []T
	array := arrays[0]
	for _, value := range array {
		var cross = true
	label:
		for _, otherArr := range arrays {
			if idx := FindIndex(otherArr, func(v types.T, index int, array []types.T) bool {
				return iteratee(v) == iteratee(value)
			}); idx < 0 {
				cross = false
				break label
			}
		}
		if cross {
			if idx := FindIndex(ret, func(v types.T, index int, array []types.T) bool {
				return iteratee(v) == iteratee(value)
			}); idx < 0 {
				ret = append(ret, value)
			}
		}
	}
	return ret
}
